package com.zliblike_platform.mapper;

import com.zliblike_platform.entity.Book;
import com.zliblike_platform.vo.BookInfoVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 书籍Mapper接口
 */
@Mapper
public interface BookMapper {
    
    /**
     * 根据ID查询书籍
     * @param bookId 书籍ID
     * @return 书籍信息
     */
    Book selectById(@Param("bookId") Long bookId);
    
    /**
     * 查询可用的书籍格式
     * @param bookId 书籍ID
     * @return 格式列表
     */
    List<String> selectAvailableFormats(@Param("bookId") Long bookId);
    
    /**
     * 更新书籍受欢迎度分数
     * @param bookId 书籍ID
     * @param score 要增加的分数
     * @return 受影响的行数
     */
    int updatePopularityScore(@Param("bookId") Long bookId, @Param("score") Integer score);
    
    /**
     * 插入书籍记录
     * @param book 书籍信息
     * @return 受影响的行数
     */
    int insert(Book book);
    
    /**
     * 根据ISBN查询书籍
     * @param isbn ISBN
     * @return 书籍信息
     */
    Book selectByIsbn(@Param("isbn") String isbn);
    
    /**
     * 更新书籍信息
     * @param book 书籍信息
     * @return 受影响的行数
     */
    int update(Book book);
    
    /**
     * 查询最受欢迎的书籍
     * @param limit 查询数量
     * @return 书籍列表
     */
    List<Book> selectPopularBooks(@Param("limit") Integer limit);
    
    /**
     * 根据分类ID查询最受欢迎的书籍
     * @param categoryId 分类ID
     * @param limit 查询数量
     * @return 书籍列表
     */
    List<Book> selectPopularBooksByCategory(@Param("categoryId") Long categoryId, @Param("limit") Integer limit);
    
    /**
     * 增加书籍受欢迎度分数
     * @param bookId 书籍ID
     * @param increment 增加的分数
     * @return 影响行数
     */
    int incrementPopularity(@Param("bookId") Long bookId, @Param("increment") int increment);
    
    /**
     * 查询最受欢迎的书籍
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 书籍列表
     */
    List<BookInfoVO> selectMostPopularBooks(@Param("offset") int offset, @Param("limit") int limit);
} 